Git¶

Сегодня мы поговорим о системе контроля версий и одной из самых популярных - Git

Введение в систему контроля версий¶

Система контроля версий - это инструмент, который позволяет нам управлять изменениями в нашем коде или проекте. Ее цель - сохранять историю изменений, облегчать совместную работу и помогать нам отслеживать, что происходит с нашим проектом.

Типы систем контроля версий¶

Существуют два основных типа систем контроля версий: распределенные и централизованные. Распределенные СКВ, такие как Git, позволяют каждому разработчику иметь полную копию репозитория(проекта) на своем компьютере. Централизованные СКВ, например, Subversion или Mercurial, имеют один центральный сервер, на котором хранятся версии проекта.

Основные понятия в Git¶

В Git есть несколько ключевых понятий, с которыми вам нужно быть знакомыми:

Репозиторий: это место, где Git хранит все версии вашего проекта. Репозиторий может быть локальным (на вашем компьютере) или удаленным (на сервере).
Коммиты: это фиксации изменений в проекте. Каждый коммит представляет собой набор изменений, сделанных в коде.
Ветки: они используются для параллельной разработки. Вы можете создавать новые ветки для работы над конкретной функцией или исправлением ошибок.
Слияние: это процесс объединения изменений из одной ветки в другую.
Хэши, деревья и файлы: это способы идентификации изменений и организации файлов в Git.

Установка и настройка Git¶

Вот ссылки на инструкции по установке Git:

  • Для Windows: https://git-scm.com/download/win
  • Для macOS: https://git-scm.com/download/mac
  • Для Linux: https://git-scm.com/download/linux

После установки Git, нам нужно настроить имя пользователя и электронную почту. Это позволит нам идентифицировать наши коммиты. Вы можете использовать следующие команды:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

Убедитесь, что замените "Your Name" на ваше реальное имя и "your.email@example.com" на вашу реальную электронную почту.

Основные команды Git¶

Теперь, когда у нас установлен и настроен Git, давайте рассмотрим некоторые основные команды, которые помогут нам начать работу:

  • git init: создает новый локальный репозиторий в текущем каталоге.
  • git clone <URL>: клонирует удаленный репозиторий на ваш компьютер.
  • git add <file>: добавляет файл в индекс, чтобы он был отслеживаемым Git.
  • git commit -am "Commit message": фиксирует изменения, создавая новый коммит.
  • git push: отправляет изменения в удаленный репозиторий.
  • git pull: получает и объединяет изменения из удаленного репозитория в ваш локальный репозиторий.
  • git branch <brach-name>: показывает список веток и текущую активную ветку.
  • git merge <branch>: объединяет указанную ветку с текущей веткой.
  • git status: получение актуального состояния репозитория.

Команды git на практике¶

git0.png

Создание локального репозитория, добавление файла, статус¶

mkdir test_project
cd test_project
git init
echo 'print("Hello world!")' >> test.py
git status

git1.png

Индексация файла, коммит¶

git add test.py или git add .
git commit -am "Initial commit"

git2.png

Git в своей работе управляет тремя структурами, которые называются деревьями. Первое — это рабочая директория, в ней хранятся файлы, с которыми вы прямо сейчас работаете. Второе — это Index, который позволяет вам вносить изменения и ничего не портить. А третье — это HEAD, который указывает на последний сделанный вами коммит.

git3.png

Log¶

git log
git4-2.png

Нажмите q, чтобы выйти

Новые изменения, diff¶

git5.png

git6.png

Как вернуться к старому коммиту?¶

  • Сделайте изменения в файле 'test.py'
  • Зафиксируйте изменения коммитом
  • git checkout 5b71805c5b2aebf33ecf798ba6bd7e48bfcf39ce

git7.png

git8.png

Отменить изменения до индексации¶

git checkout master
git checkout test.py

git9.png

Отмена проиндексированных изменений¶

git reset HEAD test.py
git10.png

Отмена коммитов¶

git revert HEAD
git11.png

Изменения коммитов¶

git commit --amend

Отличия revert от reset¶

https://www.atlassian.com/ru/git/tutorials/undoing-changes

Создание новой ветки и переключение между ними¶

git checkout -b feature/name
git branch
git checkout master
git checkout feature/name
git12.png

GitHub¶

Зарегистрируйтесь на сайте https://github.com .

Создание удаленного репозитория¶

git13-2.png

git14-2.png

Clone репозитория¶

git clone
git15-2.png

Внесение изменений в оригинальный репозиторий¶

git pull
git checkout -b <branch-name>
ваши изменения
git add .
git commit -m “commit message”
git push -u oring <branch-name>

Работа с общим репозиторием¶

Есть права на push:

git clone
…
git push

Нет прав на push:

fork repository
git clone
…
git push

create a pull request

Fork репозитория¶

git16-1.png

git16-2.png

#### Circle CI

Зарегистрируйтесь и войдите под своим аккаунтом на https://circleci.com/

git17.png

Создание pull request¶

git18-2.png

git19-2.png

.gitignore¶

Если у Вас есть файлы, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore. с перечислением шаблонов соответствующих таким файлам.

*.[oa] - игнорировать файлы заканчивающиеся на *.o или *.a
build/- игнорировать файлы в директории
doc/*.txt- игнорировать файлы *.txt в директории doc
!lib.a - отслеживать файл lib.a

Pip¶

Pip - система управления пакетами, которая используется для установки пакетов Python.

Установка pip:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

Ubuntu: sudo apt install python3-pip

Установка пакетов: pip install XXX
Удаление пакетов: pip uninstall XXX
Обновление: pip install --upgrade XXX или pip install XXX -U
Список установленных пакетов: pip list
Поиск пакетов: pip search XXX

Версия: pip --version/pip3 --version

Requirements.txt¶

$pip freeze > requirements.txt
$pip install -r requirements.txt

Правила по наименованию бранчей и коммитов¶

https://www.conventionalcommits.org/en/v1.0.0-beta.2/

Практические задания¶

  • Создайте директорию: test_project.
  • Создайте новый локальный репозиторий.
  • Создайте новую ветку с помощью git branch и переключитесь на нее. Внесите изменения и объедините ветку с основной веткой с помощью git merge.
  • Отмените последний коммит с использованием git revert. После этого проверьте, что изменения успешно отменены и создан новый коммит.
  • Создайте новую ветку с помощью git branch и переключитесь на нее. Внесите изменения в файлы и сделайте несколько коммитов. Затем переключитесь обратно на основную ветку и объедините изменения из новой ветки с помощью git merge.
  • Используйте git log для просмотра истории коммитов и их идентификаторов. Попробуйте использовать команды git diff и git show, чтобы просмотреть различия между коммитами.
  • Создайте удаленный репозиторий на платформе хостинга GitHub. Свяжите ваш локальный репозиторий с удаленным с помощью команды git remote add origin . Затем отправьте локальные коммиты в удаленный репозиторий с использованием git push.